package cn.wit.summit.chwan.retrofit;

import java.util.List;

import cn.wit.summit.chwan.models.dto.CfgMain;
import cn.wit.summit.chwan.models.dto.CommentDetailBean;
import cn.wit.summit.chwan.models.dto.GameInfoDetial;
import cn.wit.summit.chwan.models.dto.GameInfoDetialV2Bean;
import cn.wit.summit.chwan.models.dto.GameListBaseBean;
import cn.wit.summit.chwan.models.dto.NoticeCommitDataBean;
import cn.wit.summit.chwan.models.dto.NotifiCationMain;
import cn.wit.summit.chwan.models.dto.PersonHomeData;
import cn.wit.summit.chwan.models.dto.PersonHomeDataUrl;
import cn.wit.summit.chwan.models.dto.ResponseEnergyNumber;
import cn.wit.summit.chwan.models.dto.ResponseSratues;
import cn.wit.summit.chwan.models.dto.SurplusNumberBean;
import cn.wit.summit.chwan.models.dto.ThumbsDataBean;
import cn.wit.summit.chwan.models.request.AddPraiseRequest;
import cn.wit.summit.chwan.models.request.AllNetHotGameRequest;
import cn.wit.summit.chwan.models.request.CreateCommentRequest;
import cn.wit.summit.chwan.models.request.DailyNewRequest;
import cn.wit.summit.chwan.models.request.DeleteCommentRequest;
import cn.wit.summit.chwan.models.request.DiscoveryChoiceListRequest;
import cn.wit.summit.chwan.models.request.EditCommentRequest;
import cn.wit.summit.chwan.models.request.FollowGamesRequest;
import cn.wit.summit.chwan.models.request.GameDetialDataV2Request;
import cn.wit.summit.chwan.models.request.GameLibraryTwoLevelV3Request;
import cn.wit.summit.chwan.models.request.GameLibraryV3Request;
import cn.wit.summit.chwan.models.request.GamePlayTypeRequest;
import cn.wit.summit.chwan.models.request.GameRankingV3Request;
import cn.wit.summit.chwan.models.request.GetCommentDetailRequest;
import cn.wit.summit.chwan.models.request.GetCommentTokenRequest;
import cn.wit.summit.chwan.models.request.GetGameCommentRequest;
import cn.wit.summit.chwan.models.request.GreatCrackCollectionRequest;
import cn.wit.summit.chwan.models.request.MakeMoneyIndexV3Request;
import cn.wit.summit.chwan.models.request.MediaTestRequest;
import cn.wit.summit.chwan.models.request.PrizesGameListRequest;
import cn.wit.summit.chwan.models.request.SearchRequest;
import cn.wit.summit.chwan.models.request.ThematicListRequest;
import cn.wit.summit.chwan.models.request.TopicInfoRequest;
import cn.wit.summit.chwan.models.request.TopicListRequest;
import cn.wit.summit.chwan.models.request.TreviFountainRequest;
import cn.wit.summit.chwan.models.response.AccountLoginRespone;
import cn.wit.summit.chwan.models.response.AddPraiseResponse;
import cn.wit.summit.chwan.models.response.AllNetHotGameResponse;
import cn.wit.summit.chwan.models.response.ChangeIconResponse;
import cn.wit.summit.chwan.models.response.ChcekIsDownloadResponse;
import cn.wit.summit.chwan.models.response.CodeloginRespone;
import cn.wit.summit.chwan.models.response.CommentAllListResponse;
import cn.wit.summit.chwan.models.response.CreateCommentResponse;
import cn.wit.summit.chwan.models.response.DailyDiscoverResponse;
import cn.wit.summit.chwan.models.response.DailyNewIndexResponse;
import cn.wit.summit.chwan.models.response.DiscoverChiceListResponse;
import cn.wit.summit.chwan.models.response.DiscoveryIndexResponse;
import cn.wit.summit.chwan.models.response.GameDailyNewResponse;
import cn.wit.summit.chwan.models.response.GameLibraryV3Response;
import cn.wit.summit.chwan.models.response.GamePlayTypeResponse;
import cn.wit.summit.chwan.models.response.GameStarterIndexResponse;
import cn.wit.summit.chwan.models.response.GameTypeListResponse;
import cn.wit.summit.chwan.models.response.GetCommentTokenResponse;
import cn.wit.summit.chwan.models.response.GetGameDetailShareDataResponse;
import cn.wit.summit.chwan.models.response.GetTreviListResponse;
import cn.wit.summit.chwan.models.response.GreatCrackCollectionResponse;
import cn.wit.summit.chwan.models.response.ImageListByTypeResponse;
import cn.wit.summit.chwan.models.response.IndexBeanResponse;
import cn.wit.summit.chwan.models.response.IndexBeanV2Response;
import cn.wit.summit.chwan.models.response.IndexBeanV32Response;
import cn.wit.summit.chwan.models.response.IndexBeanV3Response;
import cn.wit.summit.chwan.models.response.MakeMoneyIndexResponse;
import cn.wit.summit.chwan.models.response.MakeMoneyIndexResponseV3;
import cn.wit.summit.chwan.models.response.MediaTestResponse;
import cn.wit.summit.chwan.models.response.PicCollectionTypeListResponse;
import cn.wit.summit.chwan.models.response.PrizesGameListResponse;
import cn.wit.summit.chwan.models.response.RedEnvelopeRespone;
import cn.wit.summit.chwan.models.response.ResponseBase;
import cn.wit.summit.chwan.models.response.SearchAutoResponse;
import cn.wit.summit.chwan.models.response.SearchResultResponse;
import cn.wit.summit.chwan.models.response.SendSystemResponce;
import cn.wit.summit.chwan.models.response.ThematicListResponse;
import cn.wit.summit.chwan.models.response.ThematicListV2Response;
import cn.wit.summit.chwan.models.response.TopicDetailResponse;
import cn.wit.summit.chwan.models.response.TreviFountainResponse;
import cn.wit.summit.chwan.models.response.YesterdayIncomeRankingResponse;
import cn.wit.summit.chwan.net.RpcConstant;
import cn.wit.summit.chwan.utils.AccountBean;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

/**
 * Created by Alan on 2018/6/4.
 */

public interface ApiUtil {

    @POST(RpcConstant.getCommentList)//获取点评详情
    Call<ResponseBase<CommentAllListResponse>> getGameComments(@Body GetGameCommentRequest request);

    @POST(RpcConstant.gamedetialCommentListHot)//获取点评详情
    Call<ResponseBase<CommentAllListResponse>> getGameDetailComments(@Body GetGameCommentRequest request);

    @POST(RpcConstant.dailyNewIndex)//每日上新
    Call<ResponseBase<GameDailyNewResponse>> getDailyNew(@Body DailyNewRequest request);

    @POST(RpcConstant.gameNewIndex)//游戏首发
    Call<ResponseBase<List<GameStarterIndexResponse>>> getGameNew(@Body DailyNewRequest request);

    @POST(RpcConstant.dailyDiscoverIndex)//每日发现
    Call<ResponseBase<List<DailyDiscoverResponse>>> getDailyDiscover(@Body DailyNewRequest request);

    @POST(RpcConstant.addPraise)//点赞
    Call<ResponseBase<AddPraiseResponse>> addPraise(@Body AddPraiseRequest request);

    @POST(RpcConstant.unPraise)//点踩
    Call<ResponseBase<AddPraiseResponse>> subPraise(@Body AddPraiseRequest request);

    @POST(RpcConstant.getCommentDetail)//评论详情
    Call<ResponseBase<CommentDetailBean>> getCommentDetailRequest(@Body GetCommentDetailRequest request);

    @POST(RpcConstant.getCommentToken)//获取点评token
    Call<ResponseBase<GetCommentTokenResponse>> getCommentToken(@Body GetCommentTokenRequest request);

    @POST(RpcConstant.modifyComment)//修改点评
    Call<ResponseBase<CreateCommentResponse>> editComment(@Body EditCommentRequest request);

    @POST(RpcConstant.createComment)//创建点评
    Call<ResponseBase<CreateCommentResponse>> createComment(@Body CreateCommentRequest request);

    @POST(RpcConstant.deleteComment)//删除点评
    Call<ResponseBase<AddPraiseResponse>> deleteComment(@Body DeleteCommentRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.getCheckAppVersionAndPlug)//下载并安装
    Call<ResponseBase<CfgMain>> getPlug(@Field("uid") int uid);

    @FormUrlEncoded
    @POST(RpcConstant.indexData)//(废)首页
    Call<ResponseBase<IndexBeanResponse>> getIndexData(@Field("pn") int pn);

    @FormUrlEncoded
    @POST(RpcConstant.getAutoSearch)//搜索——auto
    Call<ResponseBase<List<SearchAutoResponse>>> getAutoSearch(@Field("key_word") String key_word);

    @POST(RpcConstant.getResultSearch)//搜索
    Call<ResponseBase<SearchResultResponse>> getSearch(@Body SearchRequest request);

    @POST(RpcConstant.thematicList)//专题列表
    Call<ResponseBase<ThematicListV2Response>> getThematicList(@Body ThematicListRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.getChangeName)//修改昵称
    Call<ResponseBase<CodeloginRespone>> modifyNick(@Field("nickname") String uinicknamed, @Field("uid") String uid, @Field("token") String token);

    @POST(RpcConstant.sendMessage)//许愿池
    Call<ResponseBase<TreviFountainResponse>> sendTreviGames(@Body TreviFountainRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.getbackgames)//其他相关游戏
    Call<ResponseBase<List<GameListBaseBean>>> getbackAllGameVersion(@Field("package_name") String package_name);

    @FormUrlEncoded
    @POST(RpcConstant.checkToken)//检查token并更新数据
    Call<ResponseBase<PersonHomeDataUrl>> checkToken(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.getSurplusNumber)//回复点评
    Call<ResponseBase<SurplusNumberBean>> getSurplusNumber(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.getGameDetailInfo)//(废)游戏详情
    Call<ResponseBase<GameInfoDetial>> getGameDetialData(@Field("game_id") String game_id, @Field("uid") int uid);

    @POST(RpcConstant.getGameDetailInfoV2)//游戏详情v2
    Call<ResponseBase<GameInfoDetialV2Bean>> getGameDetialDataV2(@Body GameDetialDataV2Request request);

    @FormUrlEncoded
    @POST(RpcConstant.getGameFollow)//搜藏游戏
    Call<ResponseBase<ResponseSratues>> followGame(@Field("uid") int uid, @Field("game_id") String game_id, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.gamenotificationData)//消息通知
    Call<ResponseBase<NotifiCationMain>> gamenotificationData(@Field("uid") int uid, @Field("token") String token, @Field("pn") int pn);

    @FormUrlEncoded
    @POST(RpcConstant.getThumbsData)//点赞消息
    Call<ResponseBase<List<ThumbsDataBean>>> getThumbsData(@Field("uid") int uid, @Field("token") String token, @Field("pn") int pn);

    @FormUrlEncoded
    @POST(RpcConstant.getNoticeCommitData)//点评回复
    Call<ResponseBase<List<NoticeCommitDataBean>>> getNoticeCommitData(@Field("uid") int uid, @Field("token") String token, @Field("pn") int pn);

    @FormUrlEncoded
    @POST(RpcConstant.getUserSysten)//发送用户系统消息
    Call<ResponseBase<List<SendSystemResponce>>> getUserStsten(@Field("uid") int uid, @Field("token") String token, @Field("i") String p);

    @FormUrlEncoded
    @POST(RpcConstant.getRedBnvelope)//获取红包
    Call<ResponseBase<RedEnvelopeRespone>> getRedBnvelope(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.getCode)//获取修改密码验证码
    Call<ResponseBase<AccountLoginRespone>> getMobileCode(@Field("mobile") String mobile, @Field("type") String type);

    @FormUrlEncoded
    @POST(RpcConstant.getChangePwd)//修改密码
    Call<ResponseBase<CodeloginRespone>> getNewPwd(@Field("passwd") String passwd, @Field("code") String code, @Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.getLogin)//账号密码 登录
    Call<ResponseBase<AccountBean>> getAccountLogin(@Field("mobile") String mobile, @Field("passwd") String passwd);

    @FormUrlEncoded
    @POST(RpcConstant.getCodeLogin)//验证码登录
    Call<ResponseBase<AccountBean>> getCodeLogin(@Field("mobile") String mobile, @Field("code") String code, @Field("shareCode") String shareCode);

    @FormUrlEncoded
    @POST(RpcConstant.getCancleGameFollowGame)//取消收藏
    Call<ResponseBase<ResponseSratues>> getCancleFollowGame(@Field("uid") int uid, @Field("game_id") String game_id, @Field("token") String token);

    @POST(RpcConstant.getGameFollowGames)//收藏列表
    Call<ResponseBase<List<GameListBaseBean>>> getFollowGames(@Body FollowGamesRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.getPersonData)//我的
    Call<ResponseBase<PersonHomeData>> getPersonData(@Field("package_name") String package_name);

    @FormUrlEncoded
    @POST(RpcConstant.getUpdateGames)//其他相关游戏
    Call<ResponseBase<List<GameListBaseBean>>> getAllGameVersion(@Field("package_name") String package_name);

    @FormUrlEncoded
    @POST(RpcConstant.getGameOtherGame)//相关游戏
    Call<ResponseBase<List<GameListBaseBean>>> getGameOtherGame(@Field("game_id") String game_id);

    @FormUrlEncoded
    @POST(RpcConstant.getDownEnergy)//获取task能量值
    Call<ResponseBase<ResponseEnergyNumber>> downEnnerGhy(@Field("uid") int uid, @Field("token") String token, @Field("transactionId") String transactionId, @Field("type") String type);

    @Multipart
    @POST(RpcConstant.getChangeIcon)//修改头像
    Call<ChangeIconResponse> getChangeIcon(@Part MultipartBody.Part files, @Part("uid") int uid, @Part("token") RequestBody token);

    @POST("v1/gameTypeList/index")
    Call<ResponseBase<GameTypeListResponse>> getGameTypeList();

    @POST("v1/rankingByGgArea/index")
    Call<ResponseBase<List<GameListBaseBean>>> getRankingByGgArea(@Body DiscoveryChoiceListRequest request);

    @POST("v1/gameListByAppleArea/index")
    Call<ResponseBase<List<GameListBaseBean>>> getGameListByAppleArea(@Body DiscoveryChoiceListRequest request);

    @POST("v1/gameListByArea/index")
    Call<ResponseBase<List<GameListBaseBean>>> getGameListByArea(@Body DiscoveryChoiceListRequest request);

    @POST("v1/choiceList/index")
    Call<ResponseBase<DiscoverChiceListResponse>> getChoiceList(@Body DiscoveryChoiceListRequest request);

    @POST("v1/discoverIndexV2/index")
    Call<ResponseBase<List<DiscoveryIndexResponse>>> getDiscoverIndex(@Body TopicListRequest request);

    @POST("v1/topicInfo/index")
    Call<ResponseBase<TopicDetailResponse>> getTopicInfo(@Body TopicInfoRequest request);

    @POST("v1/topicList/index")
    Call<ResponseBase<List<DailyNewIndexResponse.TopAdBean>>> getTopicList(@Body TopicListRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.getPicCollection)
    Call<ResponseBase<PicCollectionTypeListResponse>> getPicTypeList(@Field("gameId") String game_id);

    @Multipart
    @POST(RpcConstant.addPicToTypeId)
    Call<ChangeIconResponse> addPicToImage(@Part MultipartBody.Part files, @Part("uid") int uid, @Part("token") RequestBody token, @Part("gameId") long gameId, @Part("typeId") long typeId, @Part("describe") RequestBody describe);

    @FormUrlEncoded
    @POST(RpcConstant.getPicList)
    Call<ResponseBase<ImageListByTypeResponse>> getPicList(@Field("gameId") String game_id, @Field("typeId") String typeId, @Field("pn") int pn, @Field("pc") int pc);

    @POST(RpcConstant.prizesGameList)//奖项游戏列表
    Call<ResponseBase<PrizesGameListResponse>> getPrizesGameList(@Body PrizesGameListRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.homePageV2)//首页
    Call<ResponseBase<IndexBeanV2Response>> getIndexDataV2(@Field("uid") int uid, @Field("pn") int pn);

    @FormUrlEncoded
    @POST(RpcConstant.homePageV3)//首页
    Call<ResponseBase<IndexBeanV3Response>> getIndexDataV3(@Field("credit_uid") int credit_uid, @Field("uid") int uid, @Field("pn") int pn);

    @POST(RpcConstant.greatCrackCollection)//了不起的破解集合
    Call<ResponseBase<GreatCrackCollectionResponse>> greatCrackCollection(@Body GreatCrackCollectionRequest request);

    @POST(RpcConstant.mediaTest)//媒体评测
    Call<ResponseBase<MediaTestResponse>> getMediaTest(@Body MediaTestRequest request);

    @POST(RpcConstant.allNetHotGame)//全网最热游戏 syncType = 1    1:一起玩 2:应用宝 3:google 4:taptap
    Call<ResponseBase<AllNetHotGameResponse>> getAllNetHotGame(@Body AllNetHotGameRequest request);

    @FormUrlEncoded
    @POST(RpcConstant.makeMoneyRanking)//赚钱-排行
    Call<ResponseBase<YesterdayIncomeRankingResponse>> getMakeMoneyRanking(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.makeMoneyIndex)//赚钱-排行
    Call<ResponseBase<MakeMoneyIndexResponse>> getMakeMoneyIndex(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.treviList)//许愿池清单
    Call<ResponseBase<List<GetTreviListResponse>>> getTreviList(@Field("uid") int uid, @Field("pn") int pn, @Field("type") int type);

    @FormUrlEncoded
    @POST(RpcConstant.taskStartAppTag)//任务-启动app标记
    Call<ResponseBase> taskStartAppTag(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.taskDownloadGameTag)//任务-下载游戏标记
    Call<ResponseBase> taskDownloadGameTag(@Field("uid") int uid, @Field("token") String token, @Field("gameId") String game_id, @Field("type") int type);

    @FormUrlEncoded
    @POST(RpcConstant.taskShareTag)//任务-分享标记
    Call<ResponseBase> taskShareTag(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.taskShowDialogTag)//任务-分享标记
    Call<ResponseBase> taskShowDialogTag(@Field("uid") int uid, @Field("token") String token, @Field("type") int type);

    @FormUrlEncoded
    @POST(RpcConstant.taskReadNotifyTag)//任务-消息已读
    Call<ResponseBase> taskReadNotifyTag(@Field("uid") int uid, @Field("token") String token, @Field("id") String id);

    @FormUrlEncoded
    @POST(RpcConstant.checkDownloadedGame)//任务-是否下过该游戏
    Call<ResponseBase<ChcekIsDownloadResponse>> checkDownloadedGame(@Field("uid") int uid, @Field("token") String token, @Field("gameId") String gameId);

    @FormUrlEncoded
    @POST(RpcConstant.getShareDataGameDetail)//游戏详情内获取分享数据
    Call<ResponseBase<GetGameDetailShareDataResponse>> getShareDataGameDetail(@Field("uid") int uid, @Field("token") String token, @Field("game_id") String game_id);

    @FormUrlEncoded
    @POST(RpcConstant.getShareDataPersonal)//个人获取分享数据
    Call<ResponseBase<GetGameDetailShareDataResponse>> getShareDataPersonal(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.getMakeMoneyIndexV3)//赚钱首页v3
    Call<ResponseBase<MakeMoneyIndexResponseV3>> getMakeMoneyIndexV3(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.gameLibraryV3)//（废）游戏库v3  type : 1 编辑精选 2玩法分类  3网游榜  4单机榜
    Call<ResponseBase<GameLibraryV3Response>> getGameLibraryV3(@Field("uid") int uid, @Field("pn") int pn, @Field("type") int type);

    @POST(RpcConstant.gameLibraryV3)//游戏库v3  type : 1网游榜  2单机榜
    Call<ResponseBase<List<GameListBaseBean>>> getGameRankingV3(@Body GameRankingV3Request request);

    @POST(RpcConstant.gameLibraryTwoLevelV3)//游戏库_二级页面-v3
    Call<ResponseBase<List<GameListBaseBean>>> getGameLibraryTwoLevelV3(@Body GameLibraryTwoLevelV3Request request);

    @FormUrlEncoded
    @POST(RpcConstant.getReward)//游戏库_领取奖励
    Call<ResponseBase<MakeMoneyIndexResponseV3>> getRewardV3(@Field("uid") int uid, @Field("token") String token);

    @FormUrlEncoded
    @POST(RpcConstant.checkFirstDown)//是否是第一次下载
    Call<ResponseBase<ChcekIsDownloadResponse>> checkFirstDownload(@Field("uid") int uid, @Field("token") String token);

    @POST(RpcConstant.homePageV3_2)//游戏库
    Call<ResponseBase<IndexBeanV32Response>> gameLibraryV3_2(@Body GameLibraryV3Request request);

    @POST(RpcConstant.playTypeInfoV3)//游戏玩法
    Call<ResponseBase<GamePlayTypeResponse>> gamePlayTypeV3(@Body GamePlayTypeRequest request);
}
